package sharewithus.solrclient;

import java.util.Collection;
import java.util.Map;

import org.apache.solr.client.solrj.SolrQuery;

import sharewithus.solrclient.support.OrderBy;
import sharewithus.solrclient.support.Pagination;

/**
 * Title:SolrClient Description:solr客户端操作类
 * 
 * @Create_by:Terry
 * @Create_date:2012-5-24
 * @Last_Edit_By:
 * @Edit_Description
 * @version:ShareWithUs 1.0
 * 
 */
public interface SolrClient<T> {
	
	public static final String SOLR_SCHEMA_KEY_NAME = "id";
	/**
	 * 查询数据
	 * 
	 * @param queryString
	 *            查询语句
	 * @param pageNo
	 *            页码
	 * @param pageSize
	 *            页尺寸
	 * @param orderBy
	 *            排序对象
	 * @return 分页器
	 */
	public Pagination<T> query(String queryString, int pageNo, int pageSize,
			OrderBy orderBy);
	/**
	 * 
	 * 2012-5-25, 上午9:37:48 方法描述：按query查询
	 * 
	 * @param query
	 *            SolrQuery对象
	 * @param pageNo
	 *            页码
	 * @param pageSize
	 *            页尺寸
	 * @param orderBy
	 *            OrderBy对象
	 * @return 分页器
	 */
	public Pagination<T> query(SolrQuery query, int pageNo, int pageSize,
			OrderBy orderBy);

	/**
	 * 提交数据
	 * 
	 * @param bean
	 * @return
	 */
	public boolean commitBean(T bean);

	/**
	 * 批量提交
	 * 
	 * @param beans
	 *            bean集合
	 * @return 状态值
	 */
	public boolean commitBeans(Collection<T> beans);

	/**
	 * 2012-5-31, 下午1:48:48
	 * 方法描述：更新数据
	 * @param valueMap key为字段名，value为更新值
	 * @param ids id数组
	 * @return
	 */
	public boolean update(Map<String, Object> valueMap,String... ids);
	
	/**
	 * 2012-5-31, 下午1:48:48
	 * 方法描述：更新数据
	 * @param valueMap
	 * @param queryString
	 * @return
	 */
	public boolean update(Map<String, Object> valueMap,String queryString);
	
	/**
	 * 2012-5-31, 下午1:48:48
	 * 方法描述：按query对象更新数据
	 * @param valueMap
	 * @param query
	 * @return
	 */
	public boolean update(Map<String, Object> valueMap,SolrQuery query);
	
	/**
	 * 
	 * 2012-5-25, 下午1:48:48
	 * 方法描述：按ID删除
	 * @param id
	 * @return
	 */
	public boolean deleteById(String... ids);
	
	
	/**
	 * 
	 * 2012-5-25, 下午1:49:23
	 * 方法描述：按条件语句删除
	 * @param queryString
	 * @return
	 */
	public boolean deleteByQuery(String queryString);
	
	/**
	 * 
	 * 2012-5-25, 下午1:50:34
	 * 方法描述：按query对象删除
	 * @param query
	 * @return
	 */
	public boolean deleteByQuery(SolrQuery query);
	
	/**
	 * 优化solr数据存储结构
	 * 
	 */
	public boolean optimize();
}
